Skip to content

Conversation

@zharinov
Copy link
Member

@zharinov zharinov commented Jan 6, 2026

Summary

  • Add MAX_MATCH_PAYLOAD_SLOTS constant (28) to bytecode module
  • Modify emit_epsilon to cascade large successor lists into multiple instructions
  • Add regression test for 30-branch tagged alternation

Why

Tagged alternations with 27+ branches caused a panic at ir.rs:302 because the Match64 instruction can only hold 28 payload slots. The fix splits large fan-outs into a cascade of epsilon transitions, preserving NFA semantics.

Reproducer: Q = [A0: (id) @x0 A1: (id) @x1 ... A29: (id) @x29]

@zharinov zharinov enabled auto-merge (squash) January 6, 2026 01:18
@zharinov zharinov merged commit f7d1813 into master Jan 6, 2026
4 checks passed
@zharinov zharinov deleted the fix/large-epsilon-fanout branch January 6, 2026 01:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants